#include<stdio.h>
#include<sys/ioctl.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<string.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#define NUM_THREADS 20 

// 文件描述符
int fd = 0;

// 多线程调用函数
void *pthread_fx( void *args ) {
    ioctl( fd, 1, 0 );
}

int main() {
    int ret = 0;
    
    // 打开文件
    if((fd = open("/dev/hellodr", O_RDWR)) < 0) {
        printf("%s\n", strerror(errno));
        return -1;
    }

    // 开启多线程
    pthread_t tids[NUM_THREADS];
    for ( int i = 0; i < NUM_THREADS; ++i ) {
        ret = pthread_create( &tids[i], NULL, pthread_fx, NULL );
        if ( ret != 0 ) {
            printf( "pthread_create error: error_code = %d\n", ret );
        }
    }

    // 回收线程资源
    for ( int i = 0; i < NUM_THREADS; ++i ) {
        pthread_join(tids[i], NULL);
    }

    // 关闭文件
    close( fd );
    
    return 0;
}